import selenium.webdriver
import appium.webdriver
from appium.options.android import UiAutomator2Options
from enum import Enum
import logging

from appium.webdriver.common.appiumby import AppiumBy

# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


# 定义驱动类型枚举类
class DriverType(Enum):
    SELENIUM = 'selenium'
    APPIUM = 'appium'


class DriverUtils:
    # 驱动对象存储的私有属性
    __driver = None
    __current_driver_type = None

    """
    获取门户网站的 Selenium 驱动对象或 APP 的 Appium 驱动对象
    :param type: 驱动类型，取值为 DriverType 枚举类中的值
    :return: 对应的驱动对象
    """

    @classmethod
    def get_driver(cls, type):
        if cls.__driver and cls.__current_driver_type == type:
            return cls.__driver

        if cls.__driver:
            cls.quit_driver()

        if type == DriverType.SELENIUM:
            try:
                cls.__driver = selenium.webdriver.Chrome()
                cls.__driver.maximize_window()
                cls.__driver.implicitly_wait(30)
                cls.__current_driver_type = type
                logging.info("成功创建 Selenium 驱动")
                return cls.__driver
            except Exception as e:
                logging.error(f"创建 Selenium 驱动失败: {str(e)}")
        elif type == DriverType.APPIUM:
            try:
                # 配置设备能力和测试参数
                capabilities = dict(
                    platformName='Android',  # 指定移动平台为 Android
                    automationName='uiautomator2',  # 使用 UI Automator 2 框架（Android 专属）
                    deviceName='Android',  # 设备名称（通常使用实际连接的设备名称）
                    appPackage='com.android.settings',  # 要测试的应用包名（这里是系统设置）
                    appActivity='.Settings',  # 应用的主活动（入口 Activity）
                )

                # 将字典转换为 Options 对象
                options = UiAutomator2Options().load_capabilities(capabilities)

                # Appium 服务器地址（默认本地服务器，端口 4723）
                appium_server_url = 'http://localhost:4723'
                # 创建 Appium WebDriver 实例
                cls.__driver = appium.webdriver.Remote(appium_server_url, options=options)
                cls.__driver.implicitly_wait(10)
                cls.__driver.terminate_app('com.android.settings')
                cls.__driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="TP商城单商户"]').click()
                cls.__current_driver_type = type
                logging.info("成功创建 Appium 驱动")
                return cls.__driver
            except Exception as e:
                logging.error(f"创建 Appium 驱动失败: {str(e)}")
        else:
            raise ValueError(f"不支持的驱动类型: {type}")

    """
    释放门户网站的 Selenium 驱动对象或 APP 的 Appium 驱动对象
    """
    @classmethod
    def quit_driver(cls):
        if cls.__driver:
            try:
                cls.__driver.quit()
                cls.__driver = None
                cls.__current_driver_type = None
                logging.info("成功释放驱动")
            except Exception as e:
                logging.error(f"释放驱动失败: {str(e)}")
